package com.atguigu.sparkcore.rdd.file.hdfs

import com.atguigu.sparkcore.util.MySparkContextUtil

/**
 * description ：将rdd写入hdfs文件系统
 * author ：剧情再美终是戏
 * mail : 13286520398@163.com
 * date ：Created in 2020/1/9 7:24
 * modified By ：
 * version: : 1.0
 */
object WHdfs {

  def main(args: Array[String]): Unit = {
    // TODO 设置HADOOP_USER_NAME,有两种方式
    // TODO 1、在环境变量中添加HADOOP_USER_NAME的值
    // TODO 2、在配置文件中设置HADOOP_USER_NAME的值，将传入System中
    // TODO 以下是源码：org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    /*    if (!UserGroupInformation.isSecurityEnabled && user == null) {
          var envUser = System.getenv("HADOOP_USER_NAME")
          if (envUser == null) envUser = System.getProperty("HADOOP_USER_NAME")
          user = if (envUser == null) null else new User(envUser)
        }*/
    // TODO 这里很重要,不用使用new properties方法初始化系统配置文件,不然系统初始化参数全部拿不到,需要逐一设置,很恶心
    // 由于需要写入hdfs,所以先要设置HADOOP_USER_NAME
    val properties = System.getProperties
    properties.setProperty("HADOOP_USER_NAME", "atguigu")
    System.setProperties(properties)

    // 创建sparkContext
    val sc = MySparkContextUtil.get(args)

    // 创建rdd
    val rdd = sc.parallelize(Array(("o1", 1), ("o2", 2), ("o3", 3), ("o4", 4), ("o5", 5)), 2)

    // 将rdd保存为Object文件
    rdd.saveAsTextFile("hdfs://hadoop101:9000/spark-data/output1")

    // 关闭sparkContext资源
    MySparkContextUtil.close(sc)
  }
}
